;	PDP-11 FLOATING POINT PACKAGE
;	FLOATING POINT MOVE
;	FLOATING POINT COMPARE
;	INTEGER TO FLOATING POINT CONVERSION
;	FLOATING POINT TO INTEGER CONVERSION
;
;	MODULES INCLUDED:
;	1. MOVF
;	2. CMPF
;	3. FLT
;	4. FLTD
;	5. FIX
;	6. FIXD
;	7. M.MOVE
;
;
;
;
R0	=	%0
R1	=	%1
R2	=	%2
R3	=	%3
R4	=	%4
R5	=	%5
SP	=	%6
PC	=	%7
MOVF:	MOV R1,R2
	MOV R0,R4
	MOV (R2)+,(R4)+
	MOV (R2)+,(R4)+
	MOV (R2)+,(R4)+
	RTS	PC






CMPF:	MOV	R1,-(SP)	;SAVE SEFA
	JSR	PC,M.MOVE	;PUT DESTINATION ON THE STACK
	MOV	SP,R0		;SP IS NOW THE DEFA
	MOV	6(SP),R1	;RESTORE SEFA TO R1
	JSR	PC,SUBF		;S-D TO TOP OF STACK
	MOV	2(SP),R1	;SAVE HIGH ORDER FRACTION IN R1
	ADD	#10,SP		;GET RID OF TRASH ON STACK
	NEG	R1		;SET THE INDICATORS PROPERLY
	RTS	PC




M.MOVE:	MOV	(SP)+,R1	;MAKE STACK SAME HIEHT AS AT CALL
	ADD	#6,R0		;MAKE RO POINT TO TOP OF NUMBER
	MOV	-(R0),-(SP)	;MOVE THE NUMBER BACKWARD TO THE
	MOV	-(R0),-(SP)	;STACK SO IT COMES OUT CORRECTLY
	MOV	-(R0),-(SP)
	MOV	R1,PC		;RETURN TO THE CALLER




FLT:	CLR	(R0)+
	MOV	(R1)+,(R0)+
	MOV	#100017,@R0
M.LT2:	CMP	-(R0),-(R0)
	MOV	R0,R1
	JMP	NORM




FLTD:	MOV	(R1)+,(R0)+	;MOVE FRACTION TO DESTINATION
	MOV	(R1)+,(R0)+
	MOV	#100037,@R0	;SET EXPONENT TO 30
	BR	M.LT2		;NORMALIZE


FIXD:	MOV	(R1)+,R2	;AL
	MOV	(R1)+,R3	;AH
	MOV	@R1,R4	;EXPONENT
	CMP	R4,#100037		;CHECK IF NUMBER IS TOO LARGE TO
				;BE FIXED
	BHI	M.IXD2
	BEQ	M.IXD3		;CHECK IF EXPONENT=30
	TST	R4
	BGE	M.IXD4		;IF EXPONENT<=0 THEN RESULT IS ZERO
	SUB	#100037,R4
M.IXDL:	ASR	R3		;FIX LOOP
	ROR	R2
	INC	R4
	BNE	M.IXDL
M.IXD3:	MOV	R2,(R0)+	;PUT RESULT IN DESTINATION
M.IX3:	MOV	R3,(R0)+
	RTS	PC
M.IXD2:	SEV
	RTS	PC
M.IXD4:	CLR	(R0)+
M.IXD5:	CLR	(R0)+
	RTS	PC



FIX:	MOV	(R1)+,R2	;FETCH SOURCE
	MOV	(R1)+,R3
	MOV	@R1,R4
	CMP	R4,#100017
	BHI	M.IXD2		;CHECK IF NUMBER IS TOO LARGE
	BEQ	M.IX3		;EXPONENT=15?
	CMP	#100000,R4	;COMPARE WITH ZERO EXPONENT
	BHI	M.IXD5		;RESULT =0?
	SUB	#100017,R4
M.IXL:	ASR	R3
	INC	R4
	BNE	M.IXL
	BR	M.IX3
	.EOT
                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                      